package linkExcel.utils;

import cn.hutool.core.util.StrUtil;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ToolUtils {

    /**
     * 从文件名中匹配出图号
     * @param filename 文件名
     * @return 图号
     */
    public static String extractGraphNumber(String filename) {
        // 定义图号的正则表达式，匹配连续的 '-'、'x'、字母和数字，长度大于等于 10，遇到汉字中断
        Pattern pattern = Pattern.compile("([\\w\\d\\x2D]+)");  // 使用括号进行分组

        Matcher matcher = pattern.matcher(filename);
        String graphNumber = "";

        // 查找匹配的图号
        while (matcher.find()) {
            // 获取第一个分组
            String match = matcher.group(1);
            if (match.length() >= 8) {
                // 找到图号后立即中断
                graphNumber = match;
                break;
            }
        }
        //有些小写图号转化为大写
        graphNumber = graphNumber.toUpperCase();
        //清洗图号多余后缀
        if (StrUtil.isNotBlank(graphNumber) && graphNumber.endsWith("-")){
            //如果图号不为空且最后一位是'-'，也就是'826-JB7-1-6-1-'，要修改为'826-JB7-1-6-1'
            graphNumber = graphNumber.substring(0,graphNumber.length() - 1);
        }

        return graphNumber;
    }

    /**
     * 获取相对路径
     * @param filePath 当前文件路径
     * @param excelPath Excel文件路径(这里需要获取其上级目录,否则会找不到文件)
     * @return 相对路径
     */
    public static String getRelativePath(String filePath,String excelPath) {
        if (new File(filePath).getPath().equals(new File(excelPath).getParentFile().getPath())){
            //一级菜单就返回本地，否则会为空
            return ".";
        }
        Path path = Paths.get(excelPath).getParent();
        String pathStr = path.relativize(Paths.get(filePath)).toString();
        // 替换编码
        pathStr = pathStr.replace(" ", "%20");
        pathStr = pathStr.replace("#", "%23");
        pathStr = pathStr.replace("?", "%3F");
        pathStr = pathStr.replace("=", "%3D");
        pathStr = pathStr.replace("`", "%60");
        pathStr = pathStr.replace("", "%7F");
        pathStr = pathStr.replace("\\", "//");
        return pathStr;
    }


    public static String formatFileSize(long fileSize) {
        if (fileSize <= 0) {
            return "0B";
        }

        final String[] units = {"B", "KB", "MB", "GB", "TB"};
        int digitGroups = (int) (Math.log10(fileSize) / Math.log10(1024));
        DecimalFormat decimalFormat = new DecimalFormat("#,##0.##");

        return decimalFormat.format(fileSize / Math.pow(1024, digitGroups)) + units[digitGroups];
    }
}
